package demo.gateway.filters;

import demo.gateway.config.CorsProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
@EnableConfigurationProperties(CorsProperties.class)//开启属性注入类使用
public class GlobalCORSConfig {

    /*@Autowired
    private CorsProperties prop;*/

    /**
     * 跨域请求过滤器
     */
    @Bean
    public CorsFilter corsFilter(CorsProperties prop){
        // 跨域配置信息设置  允许跨域的URL资源 例如： http://manage.leyou.com  允许跨域的请求方式 ，在跨域请求时是否允许携带cookie 等
        CorsConfiguration config = new CorsConfiguration();
        //允许跨域的URL资源
       /* List<String> list = prop.getAllowedOrigins();
        for (String s : list) {
            config.addAllowedOrigin(s);
        }*/
        prop.getAllowedOrigins().forEach(config::addAllowedOrigin);

        //允许跨域的请求方式
        prop.getAllowedMethods().forEach(config::addAllowedMethod);
        //在跨域请求时是否允许携带cookie
        config.setAllowCredentials(prop.getAllowedCredentials());
        //允许携带的请求头信息
        prop.getAllowedHeaders().forEach(config::addAllowedHeader);
        //允许跨域的最大有效时间  时间单位是秒
        config.setMaxAge(prop.getMaxAge());

        //跨域资源配置信息
        UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
        //指定跨域请求资源路径  请求到网关的所有路径，都允许跨域
        configurationSource.registerCorsConfiguration(prop.getFilterPath(),config);
        return new CorsFilter(configurationSource);
    }

}
